第5章 数的表示和算术电路
教材评价:
https://book.douban.com/subject/2308122/
下载地址:
http://m.wdfxw.net/Fulltext44364042.htm
这次回顾第5章:数的表示和算术电路。
无符号数的加法
全加器的分解
只对两个位(比特)进行加运算的电路叫做“半加器”,半加器的输出为和以及进位:
当多位(比特)数相加时,就需考虑前一位的进位,考虑如下例子:
所以完整的加法器,称为全加器,有三个输入$c_i,x_i,y_i$,其真值表,卡诺图以及电路图如下:
其中$\oplus$表示异或运算,即:
完整的公式如下:
全加器的分解
全加器可以分解为两个半加器:
行波进位加法器
有符号数
负数
符号——数值的表示法
正数与负数的数值用相同的方法来表示,用专门的正负号来区分数的正负,这种方式叫做数的“符号——数值”表示法。
例子:
$1$的补码表示法
对于$n$位负数$K$,$P=|K|$,使用$(2^n-1)-P$表示该负数,实际操作时只要将$P$的每一位取反即可。
$2$的补码表示法
对于$n$位负数$K$,$P=|K|$,使用$2^n-P$表示该负数,即$1$的补码表示法加$1$。
可以得出,若$n$位数$B=b_{n-1} b_{n-2} \cdots b_{1} b_{0}$是$2$的补码表示法表示的,那么
对比
实际中一般使用$2$的补码表示法,因为此时$0$的表示唯一,并且可以使用其二进制表示做加减运算(如果没有溢出)。
加法器和减法器单元
我们希望设计一个单元,使其包含加法和减法的功能。假设有一个控制信号来选择究竟进行加法还是减法运算,把它叫做$\overline{\text{Add}}/\text{Sub}$,并且规定它等于$0$时做加法,等于$1$时做减法。
考虑如下电路:
当$\overline{\text{Add}}/\text{Sub}=1$时,注意
所以全加器的输入为$\overline Y$,此时$c_0=\overline{\text{Add}}/\text{Sub}=1$,而$\overline Y+1=-Y$,此时就实现了减法的功能。
当$\overline{\text{Add}}/\text{Sub}=1$时,此时实现的就是普通加法的功能。
算数溢出
如果用$n$位表示一个有符号数,那么其表示范围为$-2^{n-1}\sim 2^{n-1}-1$,如果算数运算的结果超过此范围,则称发生了算数溢出的现象,注意只有两个符号相同的数相加才会发生算数溢出,来看一个具体例子:
从上面例子可以,有如下关系:
更一般的,对于$n$位数,我们有
下面说明这点。
情形1,同号:
$x_{n-1}=y_{n-1}=0$,此时总有
如果$c_{n-1}=1$,那么$s_n=1$,此时就产生了溢出(正+正=负);如果$c_{n-1}=0$,那么$s_n=0$,此时没有溢出,所以此时结论成立。
$x_{n-1}=y_{n-1}=1$,此时总有
如果$c_{n-1}=0$,那么$s_n=0$,此时就产生了溢出(负+负=正);如果$c_{n-1}=1$,那么$s_n=1$,此时没有溢出,所以此时结论成立。
情形2,异号:
只考虑$x_{n-1}=0,y_{n-1}=1$,另一种情形同理可得。如果$c_{n-1}=1$,那么$c_n=1$;如果$c_{n-1}=0$,那么$c_n=0$,注意此时一定不会产生算数溢出,所以结论成立。
快速加法器
由之前的讨论可得第$i$位的进位函数为:
将上式改写为
其中
$g$称为生成函数,$p$称为传播函数。
将上式递推可得:
上式可以用两级与-或门电路实现,该电路能够很快地计算出进位输出$c_{i+1}$的值。基于此表达式的加法器称为超前进位加法器。
乘法
无符号数的阵列加法器
首先考虑无符号数的乘法问题。
考虑$4$位乘法的例子,假设乘数与被乘数分别为$M=m_3m_2m_1m_0,Q=q_3q_2q_1q_0$。部分积$0$记作$PP0$,公式如下
$PP1$的计算过程如下:
电路图见课本181(pdf第199页)
有符号数的乘法
将数转换为$2$的补码,做乘法的过程中使用带符号拓展即可,一个具体的例子如下: